"""
函数式编程的应用
    适用场景：
        多个函数，主体结构相同，核心算法不同
"""
list1 = [3,9,12,54,4,6,56,7,8]

# 1. 定义一个函数找出第一个大于10的元素
def fund_gt10():
    for item in list1:
        if item > 10:
            return item
    return None



# 2. 定义函数找出第一个大于50的元素
def fund_gt50():
    for item in list1:
        if item > 50:
            return item
    return None

# 传统方式
print(fund_gt10())
print(fund_gt50())

print('-' * 30)

# 函数式编程
#1. 定义回调函数 CallBacks: 将不同的核心算法单独定义在回调函数中
#2. 定义高阶函数 Higher Order  Functions: 通过参数抽象回调函数（把回调函数作为参数传递）

# 回调函数 找出第一个大于10的元素
def condiction01(item):
    return item > 10

# 回调函数 找出第一个大于50的元素
def condiction02(item):
    return item >50

# 高阶函数
def find_single(condiction):
    print(condiction) # 地址
    for item in list1:
        if condiction(item):
            return item
    return None


# 调用高阶函数
print(find_single(condiction01)) # 找出第一个大于10的元素
print(find_single(condiction02))  # 找出第一个大于50的元素


